package org.huangrui.juc.source.Interrupt;

import java.util.concurrent.TimeUnit;

/**
 *
 * 1 中断标志位，默认false
 * 2 t2 ---->t1发出了中断协商，t2调用t1.interrupt()，中断标志位true
 * 3 中断标志位true，正常情况，程序停止，^^
 * 4 中断标志位true，异常情况，InterruptedException，将会把中断状态将被清除，并且将收到nterruptedException。
 *   中断标志位false，导致无限循环
 * 5 在catch块中，需要再次给中断标志位设置为true，2次调用停止程序才0K
 *
 * @Author hr
 * @Create 2024-04-02 11:12
 */
public class T03_Interrupt {
    public static void main(String[] args) {
        Thread t1 = new Thread(() -> {
            while (true) {
                if (Thread.currentThread().isInterrupted()){
                    System.out.println(Thread.currentThread().getName()+"\t " +
                            "中断标志位："+Thread.currentThread().isInterrupted()+" 程序停止");
                    break;
                }
                //暂停2毫秒
                try { TimeUnit.MILLISECONDS.sleep(2);} catch (InterruptedException e) {
                    Thread.currentThread().interrupt(); //为什么要在异常处，再调用一次？？
                    e.printStackTrace();
                }
                System.out.println("--------interrupt--");
            }
        }, "t1");
        t1.start();
        //暂停10毫秒
        try { TimeUnit.MILLISECONDS.sleep(200);} catch (InterruptedException e) {e.printStackTrace();}
        new Thread(() -> t1.interrupt(),"t1").start();
    }
}
